package sdw.ufal.p3.util;

import java.text.ParseException;
import java.util.ResourceBundle;

import javax.swing.text.MaskFormatter;

public class UtilidadesSDW {



		//objeto singleton
		private static UtilidadesSDW utilidadesSDW = new UtilidadesSDW();


		/**
		 * Método que faz com que só a própria classe possa criar objetos.
		 * Faz parte do singleton design patters
		 *
		 */
		private UtilidadesSDW(){

		}


		/**
		 * Méodo que retorna o singleton (a instância única)
		 * @return A instância única
		 */
		public static UtilidadesSDW getInstanciaUnica(){
			return utilidadesSDW;
		}

		public static boolean isTextoValido(String param) {
			return param != null && !param.trim().equals("");
		}

		public static  boolean isNumeroValido(String param) {
			boolean valido = false;
			try {
				valido = ( param != null );
				Integer.parseInt(param); 
			} catch (Exception e) {
				valido = false;
			}
			return valido;
		}

		public static  boolean isCodigoValido(String param) {
			boolean valido = false;
			try {
				valido = ( param != null && Integer.parseInt(param) > 0);
			} catch (Exception e) {
				valido = false;
			}
			return valido;
		}

		public static  String getMensagem(String chave) {
			return ResourceBundle.getBundle("ApplicationResources").getString(chave);
		}


		public static Integer getInteger(String str) {
			return (! isInteger(str) ? null : Integer.valueOf(str));
		}

		public static Long getLong(String str) {
			return ( isLong(str) ? Long.valueOf(str) : null );
		}
		

		@SuppressWarnings("unused")
		public static boolean isLong(String str) {
			try {
				long l = Long.parseLong(str);
			} catch (NumberFormatException e) {
				return false;
			}	
			return true;
		}

		@SuppressWarnings("unused")
		public static boolean isInteger(String str) {
			try {
				int i = Integer.parseInt(str);
			} catch (NumberFormatException e) {
				return false;
			}	
			return true;
		}

		public static boolean isLongPositivo(String str) {
			try {
				return Long.parseLong(str) > 0 ;
			} catch (NumberFormatException e) {
				return false;
			}	
		}

		public static boolean isIntegerPositivo(String str) {
			try {
				return Integer.parseInt(str) > 0;
			} catch (NumberFormatException e) {
				return false;
			}	
		}


		public static double formataValor(String valor) {
			return Double.parseDouble(valor.replaceAll("\\.", "").replaceAll(",", "\\."));		
		}

		/**
		 * Formata um double no formato 9.999.999,99
		 * @param valor
		 * @return
		 */
		public static String formataValor(double valor) {
			// inicializa variáveis
			String strValor = String.valueOf(valor);
			String[] str    = (strValor.contains(".") ? strValor.split("\\.") : strValor.split(","));

			// acerta os centavos
			String centavos = "";
			if( str[1].length() == 0 )
				centavos = ",00";
			else if( str[1].length() == 1 )
				centavos = "," + str[1] + "0";
			else
				centavos = "," + str[1];

			// acerta a parte inteira
			String parteInteira = "";
			int len = str[0].length();
			for( int i=0; i < len; i+=3 ) {
				int fim = len - i;
				int ini = Math.max(fim - 3, 0); 
				parteInteira = str[0].substring(ini, fim) + (i != 0 ? "." : "") + parteInteira;
			}

			return (parteInteira + centavos);		
		}

		public static String formatarString(String texto, String mascara)
		throws ParseException {
			if(texto.trim().equals(""))
				return texto;
			MaskFormatter mf = new MaskFormatter(mascara);
			mf.setValueContainsLiteralCharacters(false);
			return mf.valueToString(texto);
		}

		public static String removerFormat(String texto, String caracteresRemover) {
			String retorno = texto;
			int pos = 0;
			for (int j = 0; j < caracteresRemover.length(); j++) {
				pos = retorno.indexOf(caracteresRemover.charAt(j));
				if (pos > 0)
					retorno = retorno.replaceAll(
							"\\" + caracteresRemover.charAt(j), "");
			}

			return retorno;
		}

}
